package br.com.sgh.beans;

import br.com.sgh.dao.FuncionarioDAO;
import br.com.sgh.entidade.Funcionario;
import br.com.sgh.util.FacesContextUtil;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean(name = "funcBean")
@RequestScoped
public class FuncionarioBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private List<Funcionario> funcionarios;
    private Funcionario funcionario;
    private String confirmaSenha;

    private FuncionarioDAO<Funcionario> dao() {
        FuncionarioDAO<Funcionario> dao = new FuncionarioDAO<Funcionario>(Funcionario.class, FacesContextUtil.getRequestSession());
        return dao;
    }

    public String salvarFuncionario() {
        String permissao;
        if (funcionario.isAdministrador()) {
            permissao = "ROLE_ADMINISTRADOR";
        } else {
            permissao = "ROLE_USUARIO";
        }

        if (funcionario.getCodFuncionario() == null || funcionario.getCodFuncionario() < 1) {
            if (funcionario.getSenha().equals(confirmaSenha)) {
                funcionario.getPermissao().add(permissao);
                if (dao().verificaLogin(funcionario.getMatricula()).size() < 1) {
                    dao().salvar(funcionario);
                    cancelar();
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Gravado com sucesso!", ""));
                } else {
                    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Existe um Funcionário Cadastrado com essa Matricula", ""));
                    return null;
                }
            } else {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Senha não Confere!", ""));
            }
        } else {
            funcionario.getPermissao().add(permissao);
            dao().atualizar(funcionario);
            cancelar();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Alterado com sucesso!", ""));
        }

        return null;
    }

    public String editar(Integer codigo) {
        funcionario = dao().getEntity(codigo);
        return null;
    }

    public void cancelar() {
        funcionario = new Funcionario();
    }

    public List<Funcionario> getFuncionarios() {
        if (funcionarios == null) {
            funcionarios = dao().funcionarios();
        }
        return funcionarios;
    }

    public void setFuncionarios(List<Funcionario> funcionarios) {
        this.funcionarios = funcionarios;
    }

    public Funcionario getFuncionario() {
        if (funcionario == null) {
            funcionario = new Funcionario();
        }
        return funcionario;
    }

    public void setFuncionario(Funcionario funcionario) {
        this.funcionario = funcionario;
    }

    public String getConfirmaSenha() {
        return confirmaSenha;
    }

    public void setConfirmaSenha(String confirmaSenha) {
        this.confirmaSenha = confirmaSenha;
    }

}
